package lin

import "sync"

type R日志 struct {
	保存文件夹路径   string
	保存文件名     string
	读写许可      *sync.RWMutex
	是否按日期创建文件 bool
}

//@保存文件夹路径  列子"D:\错误\"
//@保存文件名  列子  "错误日志"
//@是否按日期创建文件  为 true 时  例子 变成"D:\错误\错误日志2024-01-01.txt"
func (类 *R日志) C初始化(保存文件夹路径, 保存文件名 string, 是否按日期创建文件 bool) {
	if !全_文本.P判断后缀(保存文件夹路径, `/`) && !全_文本.P判断后缀(保存文件夹路径, `\`) {
		保存文件夹路径 = 保存文件夹路径 + `\`
	}
	if 全_文本.X寻找文本(保存文件名, ".txt") != -1 {
		保存文件名 = 全_文本.T替换文本(保存文件名, ".txt", "", -1)
	}
	类.保存文件夹路径 = 保存文件夹路径
	类.保存文件名 = 保存文件名
	类.是否按日期创建文件 = 是否按日期创建文件
	var 锁 sync.RWMutex
	类.读写许可 = &锁
}

//@若有错误 返回true 否则返回 false
func (类 *R日志) X写出err日志(err error, 信息备注 ...string)bool {
	if err == nil {
		return false
	}
	错误文本 := "\r\n" + "时间:" + 全_时间.D到文本(全_时间.QX取现行_时间()) + "\r\n" + "错误:" + err.Error() + "\r\n"
	for i, v := range 信息备注 {
		错误文本 = 错误文本 + "备注" + 全_类型.D到文本(i+1) + ":" + v + "\r\n"
	}
	全路径 := 类.保存文件夹路径 + 类.保存文件名
	if 类.是否按日期创建文件 {
		日期 := 全_类型.D到文本(全_时间.QX取现行_时间())
		日期 = 全_文本.QZ取左边(日期, " ")
		全路径 = 全路径 + 日期 + ".txt"
	} else {
		全路径 = 全路径 + ".txt"
	}
	go 写日志(类.读写许可, 全路径, 错误文本)
	return true
}

func (类 *R日志) X写出普通日志(日志信息 ...string) {

	错误文本 := "\r\n" + "时间:" + 全_时间.D到文本(全_时间.QX取现行_时间()) + "\r\n"
	for i, v := range 日志信息 {
		错误文本 = 错误文本 + "信息" + 全_类型.D到文本(i+1) + ":" + v + "\r\n"
	}
	全路径 := 类.保存文件夹路径 + 类.保存文件名
	if 类.是否按日期创建文件 {
		日期 := 全_类型.D到文本(全_时间.QX取现行_时间())
		日期 = 全_文本.QZ取左边(日期, " ")
		全路径 = 全路径 + 日期 + ".txt"
	} else {
		全路径 = 全路径 + ".txt"
	}
	go 写日志(类.读写许可, 全路径, 错误文本)
}

func 写日志(读写许可 *sync.RWMutex, 文件全路径 string, 日志内容 string) {
	读写许可.Lock()
	defer 读写许可.Unlock()
	全_文件.X写到_文件尾(文件全路径, []byte(日志内容))
}
